package num284;
// Java Iterator interface reference:
// https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html

import java.util.Iterator;

/**
 * 284. 窥探迭代器
 * 题目：https://leetcode-cn.com/problems/peeking-iterator/
 * 三叶姐题解: https://leetcode-cn.com/problems/peeking-iterator/solution/gong-shui-san-xie-die-dai-qi-ji-ben-ren-b77lz/
 * 迭代器基本认识 + 模拟
 */
class PeekingIterator implements Iterator<Integer> {
	Iterator<Integer> iter;
	Integer next;
	public PeekingIterator(Iterator<Integer> iterator) {
	    // initialize any member here.
		iter = iterator;
		if (iterator.hasNext()) next = iterator.next();
	}

    // Returns the next element in the iteration without advancing the iterator.
	public Integer peek() {
		return next;
	}

	// hasNext() and next() should behave the same as in the Iterator interface.
	// Override them if needed.
	@Override
	public Integer next() {
		Integer ans = next;
		next = iter.hasNext() ? iter.next() : null;
		return ans;
	}

	@Override
	public boolean hasNext() {
		return next != null;
	}
}
